<!DOCTYPE html>
<html>
<head>
    <title>stock 笔记</title>
</head>
<body>
<div>
    <!-***********************************************************************************************->
    <p>备忘录：</p>
    <table border="1" cellspacing="0">
        <tr class="table-header">
            <td>日期</td>
            <td>内容</td>
        </tr>
        <tr>
            <td class="date">2021-3-8</td>
            <td class="content">
                创业板从2020年8月24日开始涨跌停为20%。
            </td>
        </tr>
        <tr>
            <td class="date">2020-11-19</td>
            <td class="content">
                elasticsearch学习和写代码 看书、哪里都行 写代码、哪里都行 不久就要用
                几本书的学习 看书、哪里都行
                微信小程序 写代码、只能在家
                adam 写代码、只能在家 修改bug的优先级比较高
                机器学习的学习和写代码 看书、哪里都行 写代码、只能在家

                早晚上下班 可以
                早上1小时 可以 可以
                下班回家1.5~2小时 可以 可以
                周末 可以 可以

                结论：
                早上上班：看那几本书
                早上1小时：elasticsearch学习和写代码
                晚上下班：看机器学习
                下班回家1.5~2小时：adam日常，看机器学习的书和写代码
                周末：微信小程序、看机器学习的书和写代码、adam日常
            </td>
        </tr>
        <tr>
            <td class="date">2020-11-19</td>
            <td class="content">
                select max(t.sell_date) from mdl_macd_gold_cross t;
                select max(t.date_) from board_index t;
                select max(t.date_) from stock_index t;
                select max(t.date_) from mdl_top_stock t;
                select max(t.date_) from stock_transaction_data t;
                select max(t.date_) from mdl_stock_analysis t;

                select max(t.end_date) from STOCK_INDEX_WEEK t;
                select max(t.end_date) from stock_week t;

                现状：
                stock_transaction_data表的最大日期是2020-12-02。
                board_index表最大日期2020-12-02。
                stock_index表的最大日期是2020-12-02。
                mdl_top_stock表的最大日期是2020-12-02。
                mdl_macd_gold_cross表的sell_date最大日期是2020-12-01。
                mdl_stock_analysis表的最大日期是2020-12-02。

                STOCK_INDEX_WEEK表的end_date最大日期是2020-11-27。
                stock_week表的end_date最大日期是2020-11-27。

                mdl_kd_gold_cross表的sell_end_date最大日期是2020-08-28。
            </td>
        </tr>
        <tr>
            <td class="date">2020-11-19</td>
            <td class="content">
                比较费时间的计算：
                开始更新stock_transaction_data表中date_字段为【20201105】的记录的ma5，ma10，ma20，ma60、ma120和ma250字段
                24分钟，24分钟

                开始计算所有股票在【20201105】的MACD数据
                1小时31分钟，39分钟

                更新stock_transaction_data表中日期【20201105】的KD指标
                2小时52分钟，36分钟

                Hibernate: {call PKG_MODEL_RECORD.CAL_MDL_MACD_GOLD_CROSS_INCR(?)}
                1小时22分钟，47分钟

                Hibernate: {call PKG_MODEL_RECORD.WRITE_MDL_TOP_STOCK(?,?)}
                5小时40分钟，1小时6分钟
            </td>
        </tr>
        <tr>
            <td class="date">2020-08-28</td>
            <td class="content">
                stock_info表中的数据是从同花顺导入的，由于存在新上市的股票和退市的股票，所以旧的stock_info表和
                新的stock_info有些数据可能是对不上的。最理想的做法就是每次重新导入stock_info后，所有基础数据都
                重新进行计算，但是这样需要的时间太长，因此也可以考虑不重新计算基础数据。但是这样的话就会出现有些
                股票的交易记录数据库里没有。比如002988是2020年8月17在导入stock_info表时导入的，旧的
                stock_info表中没有这只股票，结果从这只股票的第一个交易日到2020年8月14日的交易记录都没有了。这会
                导致有些计算出现误差，比如下面前两个sql的结果本来应该和第三个一样，结果不一样了：
                select count(distinct t.stock_code) from mdl_kd_gold_cross t;3772
                select count(distinct t.stock_code) from mdl_macd_gold_cross t;3794
                select count(distinct t.code_) from stock_transaction_data t;3949
                鉴于此，可以考虑每一年重新导入一次stock_info表，然后所有基础数据重新计算；除此之外，其它导入
                stock_info表的时候，就不再重新计算基础数据了。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-26</td>
            <td class="content">
                1.创建了新表stock_transaction_data，原表stock_moving_average不再使用。<br>
                2.创建了新表stock_info，原表stock_code不再使用。<br>
                3.创建了包PKG_STOCK_TRANSACTION_DATA，以前的包PKG_MOVING_AVERAGE就不再使用了。<br>
                4.创建了新表stock_week，原表stock_weekend不再使用。<br>
                5.创建了包PKG_WEEK，以前的包PKG_WEEKEND就不再使用了。<br>
                从业务的角度，暂时没有科创版指数。

                java.io.FileNotFoundException:
                C:\mywork\gitcode-repository\hades\dev-project\adam\src\main\resources\report\adam_report.pdf (系统找不到指定的路径。)
                at java.io.FileOutputStream.open0(Native Method)
                at java.io.FileOutputStream.open(FileOutputStream.java:270)
                at java.io.FileOutputStream.
                <init>(FileOutputStream.java:213)
                    at java.io.FileOutputStream.
                    <init>(FileOutputStream.java:101)
                        at cn.com.acca.ma.service.impl.ReportServiceImpl.createReport(ReportServiceImpl.java:366)
                        at cn.com.acca.ma.main.StockMain.generateReport(StockMain.java:515)
                        at cn.com.acca.ma.main.StockMain.main(StockMain.java:177)
                        2020-07-01 08:39:49 [main] [INFO] [cn.com.acca.ma.main.StockMain][main][189] -> StockMain程序执行完毕。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                2019年7月22日是科创版的第一个交易日。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                百度网盘上有以前生成的图片。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                通过接口获取的数据，如果满足下面三个条件，则说明这只股票处于停牌状态：<br>
                1) open_price, close_price, highest_price, lowest_price, turnover_rate, volume, turnover为0，<br>
                2) change_amount, change_range为空，<br>
                3) total_market_value, circulation_market_value不为0，也不为空，并且连续的几个交易日都一样
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                1.存储过程pkg_stock_transaction_data.WRITE_STOCK_TRANSACTION_DATA不打算再使了，但也先别删除。<br>
                2.由于在从网络上获取到基础数据时，就已经计算出了stock_transaction_data表的up_down字段的值，
                因此StockMain类中的writeUpDownByDate方法和writeUpDown不再使用了。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                有的股票交易数据中有“成交笔数”，有的没有。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                已经从旧硬盘中拷贝了以前的备份，数据库部分的备份很有用，代码应该已经是最新的了。存储在目录C:\mywork\gitcode-repository\from-old-computer中。
            </td>
        </tr>
    </table>
    <!-***********************************************************************************************->
    <p>工作进展情况：</p>
    <table border="1" cellspacing="0">
        <tr class="table-header">
            <td>日期</td>
            <td>内容</td>
        </tr>
        <tr>
            <td class="date">2020-05-27</td>
            <td class="content">
				年份		boll(2)		boll(3)		hei_kin_ashi(343)	交易次数(2,3)
				2011		-3/2		6.75		44.5				1823/2074	1239
				2012		32.5/14.25	25.5		10.25				2134/2389	1597
				2013		34/22.5		13.25		24.25				2344/2688	1734
				2014		10.25		2.75		19.5				2271	1913
				2015		44.75					101.25				1711
				2016		10.75					-8.75				2042
				2017		9						17.75				2296
				2018		14.75					13.75				2205
				2019		53.25					9					2443
				2020		67.75					22.25				2352
				2021		25.5					-0.5				2608
				2022		73						15.5				2343
				$$$.以后研究股票+算法要按照这个思路找算法：低维混沌、分形、长期记忆效应、非线性动力学、金融时间序列。
					算法相关：ARCH模型族（自回归条件异方差）、GARCH模型（广义ARCH模型）、ARCH-M模型、GARCH-M模型、EGARCH模型。
					名词：正反馈机制、异质性、外部随机事件（白噪声）、内生不稳定性、非正态分布、独立同分布、自相关、偏自相关、
						非周期循环、厚尾性、布朗运动、日历黑洞、对数的一阶差分、有效市场、随机游走。
				86.如果前一周的周线级别布林带的最低价跌破了布林带下轨，则在日线级别可以做多。做空也一样。这是过滤条件。
				85.当跌破布林带下轨后做多时，如果某个最高价突破了布林带上轨就可以卖出了，不用必须是收盘价。做空也一样。
		        84.Robot5Main的sell_or_buy存储过程改过了，因此所有501开头的测试都得重新测一遍，先从5012018开始。
		        83.his_robot_task.py还没有执行完，该执行his_robot_handler.insert_into_his_robot_account_log()。
		        82.Robot3Main可以考虑金叉/死叉后按照MACD或KD来卖出/还券，测试一下试试。
				80.可以考虑将Robot3Main和Robot4Main合并为一个Robot5Main，每两个账号使用一种方法，然后设置权重。如果上个月第一种
					方法收益更高，则增加第一种方法的权重，减少第二种方法的权重。
				79.方法robot3StockFilterDao.filterByStockWeekKDBetween有问题，它使用了未来数据。
				78.his_robot_account_log表里有124380条记录都是“锟斤拷锟斤拷”，这个以后有时间得弄一下了，现在无法画出一年收益折线图了。
					方法store_his_robot_account_log_in_file和insert_into_his_robot_account_log回头还得看看。
				77.Robot4Analysis类好像没什么用。
				76.考虑一个新的算法：如果股价突破布林带上轨，之后第一个开始下跌的交易日融券，在进入布林带上轨
					后，第一个上涨还券。要设置止损。融券后无论股价在上轨之上是涨还是跌都不平仓。这个可以先创建个表来计算一下成功率。
				71.每年收益图可能得重新画了，四个账号的收益改为平均收益。MACD、close_price和ma5、hei_kin_ashi、kd选一个也画上去。
					平均持仓也加上。
				68.把hei_kin_ashi加入到Robot4Main中测试一下看看效果如何。
					注意此处应该分两个思路：一个是上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价；另一个是上一周
					hei_kin_ashi是否是阳线。这两个都做好了，还得测试一下。
				67.考虑对每日、周、月的收盘价和所有均线计算标准差，然后作图，看看是否可以找出窄幅震荡的行情。
					计算所有标准差的代码已经运行完了，计算每日、周、月的代码还没运行过。
					日线级别的折线图已经好了，不过似乎没什么用。
				65.分析：
					401：2011年。上一周KD不用金叉死叉，只要K掉头向上或向下即可。只在星期五买入。删除本周KD金叉/死叉的股票。
					402：2011年。上一周KD不用金叉死叉，只要K掉头向上或向下即可。周一至周五都能买入。删除上一周KD金叉/死叉的股票。
					403：2011年。上一周KD金叉死叉。只在星期五买入。删除本周KD金叉/死叉的股票。
					404：2011年。上一周KD金叉死叉。周一至周五都能买入。删除上一周KD金叉/死叉的股票。

					405：2011年。上一周KD不用金叉死叉，只要K掉头向上或向下即可。只在星期五买入。删除本周close_price和ma5金叉/死叉的股票。
					406：2011年。上一周KD不用金叉死叉，只要K掉头向上或向下即可。周一至周五都能买入。删除上一周close_price和ma5金叉/死叉的股票。
					407：2011年。上一周KD金叉死叉。只在星期五买入。删除本周close_price和ma5金叉/死叉的股票。
					408：2011年。上一周KD金叉死叉。周一至周五都能买入。删除上一周close_price和ma5金叉/死叉的股票。

					409：2011年。上一周close_price和ma不用金叉死叉，只要close_price掉头向上或向下即可。只在星期五买入。删除本周close_price和ma金叉/死叉的股票。
					410：2011年。上一周close_price和ma不用金叉死叉，只要close_price掉头向上或向下即可。周一至周五都能买入。删除上一周close_price和ma金叉/死叉的股票。
					411：2011年。上一周close_price和ma金叉死叉。只在星期五买入。删除本周close_price和ma金叉/死叉的股票。
					412：2011年。上一周close_price和ma金叉死叉。周一至周五都能买入。删除上一周close_price和ma金叉/死叉的股票。

					413：2011年。上一周close_price和ma不用金叉死叉，只要close_price掉头向上或向下即可。只在星期五买入。删除本周KD金叉/死叉的股票。
					414：2011年。上一周close_price和ma不用金叉死叉，只要close_price掉头向上或向下即可。周一至周五都能买入。删除上一周KD金叉/死叉的股票。
					415：2011年。上一周close_price和ma金叉死叉。只在星期五买入。删除本周KD金叉/死叉的股票。
					416：2011年。上一周close_price和ma金叉死叉。周一至周五都能买入。删除上一周KD金叉/死叉的股票。

					之前测试结果好的是这个（和415、416很像）：2011年。上一周close_price和ma金叉死叉。周一至周五都能买入。删除本周KD金叉/死叉的股票。
					也可以试试这个：
					417：上一周close_price和ma不用金叉死叉，只要close_price掉头向上或向下即可。周一至周五都能买入。删除上一周KD不用金叉死叉，只要K掉头向上或向下即可。

					418：上一周close_price和ma金叉死叉。周一至周五都能买入。删除上一周KD不用金叉死叉，只要K掉头向上或向下即可。

					419：2011年。上一周KD不用金叉死叉，只要K掉头向上或向下即可。周一至周五都能买入。
					420：2011年。上一周KD金叉死叉。周一至周五都能买入。
					421：2011年。上一周close_price和ma不用金叉死叉，只要close_price掉头向上或向下即可。周一至周五都能买入。
					422：2011年。上一周close_price和ma金叉死叉。周一至周五都能买入。

					423：2011年。上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价。只在星期五买入。删除本周hei_kin_ashi收盘价大于/小于上周hei_kin_ashi收盘价的股票。
					424：2011年。上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价。周一至周五都能买入。删除上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价的股票。
					425：2011年。上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价。只在星期五买入。删除本周hei_kin_ashi是阳线/阴线的股票。
					426：2011年。上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价。周一至周五都能买入。删除上一周hei_kin_ashi是阳线/阴线的股票。

					427：2011年。上一周hei_kin_ashi是阳线/阴线。只在星期五买入。删除本周hei_kin_ashi收盘价大于/小于上周hei_kin_ashi收盘价的股票。
					428：2011年。上一周hei_kin_ashi是阳线/阴线。周一至周五都能买入。删除上一周hei_kin_ashi收盘价大于/小于上上周hei_kin_ashi收盘价的股票。
					429：2011年。上一周hei_kin_ashi是阳线/阴线。只在星期五买入。删除本周hei_kin_ashi是阳线/阴线的股票。
					430：2011年。上一周hei_kin_ashi是阳线/阴线。周一至周五都能买入。删除上一周hei_kin_ashi是阳线/阴线的股票。

					431：2011年。本周MACD和上周比起来上涨/下跌。只在星期五买入。删除本周MACD和上周比起来上涨/下跌的股票。
					432：2011年。本周close_price和上周比起来上涨/下跌。只在星期五买入。删除本周close_price和上周比起来上涨/下跌的股票。
					433：2011年。本周hei_kin_ashi是阳线/阴线。只在星期五买入。删除本周hei_kin_ashi是阳线/阴线的股票。
					434：2011年。本周KD的K和上周比起来上涨/下跌。只在星期五买入。删除本周KD的K和上周比起来上涨/下跌的股票。

					435：2011年。本周hei_kin_ashi收盘价大于/小于上周hei_kin_ashi收盘价。只在星期五买入。删除本周hei_kin_ashi是阳线/阴线的股票。
						当前收盘价与某段时间最高价/最低价的百分比。MA单调递增/递减。

					436：如果本周KD在30至70之间，则本周KD来决定如何判断操作方向；
						如果本周KD大于70或者小于30，则本周hei_kin_ashi来决定如何判断操作方向。
						只在星期五买入。
						如果本周KD在30至70之间，则删除本周KD的K和上周比起来上涨/下跌的股票；
						如果本周KD大于70或者小于30，则本周hei_kin_ashi是阴线/阳线。

					结论：
					a.周线级别close_price金叉死叉ma5过于敏感，可能还是周线级别kd金叉死叉比较好。
					b.周线级别kd金叉死叉，在70以上或30以下的时候就出现了钝化，应该考虑使用close_price金叉死叉ma5。
				62.可以开始测试Real4TransactionMain和Robot4Main了，至少的测试3个月，还得测试当天的（调用接口获取当天的股票
					交易数据）。
					一个很大的sql已经写好了，可以替换findByCondition方法中的sql了。这个弄好了。
					2021年8月2日的测试通过了，接下来应该从2021年8月3日开始测试了。
					下面是8月3日的Robot4Main和Real4TransactionMain：
					Robot4Main：

					Real4TrasactionMain：

				61.从第一个表开始，从上向下看，看看针对每个表还能有什么思路，比如板块的几个表就有的搞。
				60.writeBoard2IndexDaily方法可以将数据插入到board2_index表和board2_index_detail表了，还需要一上来做一个判断：
					日过当天的数据已经有了，就不再插入数据了。
            	59.两个思路：
            		a.选每个股票各种算法成功率最高的。还是因为成功率算法的滞后性，导致无法预测未来的走势。
					b.一段上涨中涨得最好的，一段下跌中跌得最恨的。
            	58.已经有了表mdl_stock_index_up_down_date，接下来可以写程序来分析了。
            	57.根据robot4Main在2022年的交易情况，可以有以下几点优化方案：
            		a.再重新测试4次，每次只使用固定的一种指标，看看是否效果会有不同。没有不同
            		b.止损不能太小，止盈也不能太小。结果区别不大
            		c.个股不能是之前涨了很大一段的，可以考虑必须是周线级别收盘价在布林带中轨下边的，或者周线级别KD刚刚
            			金叉的。结果区别不大
					d.过滤收盘价在最大值之上或最小值之下的股票。交易次数增加了，收益有了明显的上涨
					e.120日和250日均线单调递减。交易次数增加了，收益有了明显的上涨
                56.robot3在2022年收益25%，21、20、19年收益都不好，需要好好研究一下。
            	55.考虑周线级别KD金叉和死叉作为买卖标准。比如如果前一周K从上涨变为下跌，或者死叉了，则这个交易日开始
            		寻找死叉的股票（并且还是处于下跌通道中）；如果前一周K从下跌变为上涨，或者金叉了，则这个交易日开始
            		寻找金叉的股票（并且还是处于上升通道中）。
            	53.现在的问题是实验挺多，但是实验之前的分析不多，因此应该先加强分析，思路如下：
            		a.先判断所有股票整体上是上涨、下跌、还是震荡。
            		b.再判断具体的股票是上涨、下跌、还是震荡。
            		c.如果整体是上涨就选择上涨的股票执行对应的操作；如果整体是下跌就选择下跌的股票执行对应的操作；
            			如果整体是震荡就选择震荡的股票执行对应的操作。
            	52.接下来的几个思路：
            		a.用python画的图还有俩个（成功率和收益率）可以拿来当算法试试。
            		b.mdl_top_stock_detail表可以考虑作为算法，可以先画个图看看。
            			LaboratoryMain.createModelTopStockDetailPicture方法有问题。
            		c.海龟算法和逆趋势算法可以写成算法试试。
            		d.可以考虑把止盈加入进去。
                51.CAL_WEEK_BOLL开头的八个表和MDL_G_C_D_C_ANALYSIS表还没有增量备份。
                50.方法writeModelWeekBollClosePriceMa5DeadCross执行了5个多小时都没结束。
                49.计算每周布林带相关的字段用了7个小时！
                48.计算周线级别布林带CAL_WEEK_BOLL，然后模拟交易。如果周线级别跌破布林带下轨，则在日线级别用4中交易方法
                	交易。
                47.robot测试显示每年的收益率变化幅度都很大，一定要找到原因。
                43.数据库表的注释不全，类中的注释也不全，正在补全，已经到达了plsql的MDL_HEI_KIN_ASHI_UP_DOWN表了。
                41.hei_kin_ashi计算公式：
	                HaClose:=(O+C+H+L)/4;
	                HaOpen:=(IF(NOT(ISNULL(REF(HaOpen,1))),REF(HaOpen,1),O)+IF(NOT(ISNULL(REF(HaCLose,1))),REF(HaClose,1),C))/2;
	                HaHigh:=MAX(H,HaOpen);
	                HaLow:=MIN(L,HaOpen);
                42.应该在robot中再创建一个方法，以便于方法doBuyAndSellByBeginDateAndEndDate区分。
                	model-filter.properties中也要分为RobotMain和RealTransactionMain两部分。这个应该考虑打分支了。
                37.RobotMain中不再控制仓位了，看看这样收益是否会增加。两个时间段都测试一下。
                36.上面这个测试完之后，再测试一下，无论做多还是做空，如果把过滤减少到最少，是否会提高收益。
                35.bucky项目查找相同问题的功能有问题，有相同的却查不出来。
                34.RobotMain类最后打印买卖建议，也就是filter.buy.sell.print.format=2时格式有问题。=1时没问题。但好像以前都是用2。
                31.查找4种算法的最大成功率：
	                KD金叉：42.16049998832
	                select
	                (select count(*) from mdl_kd_gold_cross t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d
	                where t.profit_loss>0)/
	                (select count(*) from mdl_kd_gold_cross t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d)*100
	                from dual;
	                MACD金叉：40.3774608389497
	                select
	                (select count(*) from mdl_macd_gold_cross t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d
	                where t.profit_loss>0)/
	                (select count(*) from mdl_macd_gold_cross t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d)*100
	                from dual;
	                close_price金叉ma5：41.6356521907813
	                select
	                (select count(*) from mdl_close_price_ma5_gold_cross t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d
	                where t.profit_loss>0)/
	                (select count(*) from mdl_close_price_ma5_gold_cross t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d)*100
	                from dual;
	                hei_kin_ashi上涨趋势：43.3065490976946
	                select
	                (select count(*) from mdl_hei_kin_ashi_up_down t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d
	                where t.profit_loss>0)/
	                (select count(*) from mdl_hei_kin_ashi_up_down t
	                join stock_week t1 on t1.code_=t.stock_code and t.buy_date between t1.begin_date and t1.end_date and
	                t1.k>t1.d)*100
	                from dual;
                29.接下来要做的三种交易策略：
	                a.mdl_top_stock_detail表的up_down_percentage_*和percentage_*_ma*列金叉死叉算法。
	                b.计算每一只股票最近3次交易中，各种算法的成功率，买哪个成功率最高的算法的的股票。
	                c.macd,close_price_ma5,hei_kin_ashi,kd四种交易策略基本上是同步的，只是有时这个成功率高，那个成功率低，有时这个成功率低，
	                那个成功率高。因此应该将四种交易策略混合使用，在某一天哪种交易策略最近10天内成功率最高就使用哪种交易策略。
                28.先试试writeModelTopStockDetailMA方法，各种情况都试试，万一有收获呢。已经运行完了，程序是正确的。
                	这个方法是正确的，但是至少得有一年的数据时再计算才有意义。
                27.robot程序要重新测试一下，选择不同的算法组合，编写文档《Robot程序模型测试结果》，时间段可以考虑2014年和2015年。
                	时间跨度为半年。上证指数上涨和下跌分别测试一次，看看区别。
                26.多空排列图中，判断多头还是空头的sql中没有用250日均线，考虑是否要加上。
                25.继续写完《图表说明.xlsx》，按顺序即可。
                24.移动平均线也许可以分类，每个分类给个编号，各个均线和收盘价的不同排列有不同的编号，这样也许能够确定现在是单边市，
	                还是震荡市。已经在表mdl_stock_analysis中创建了列close_price_ma_order。存储过程也都写完了，测试都通过了。
	                接下来是考虑怎么应用。
	                select a.close_price_ma_order, count(*)
	                from mdl_macd_gold_cross macd
	                join mdl_stock_analysis a on a.code_=macd.stock_code and a.date_=macd.buy_date
	                where macd.profit_loss>0
	                group by a.close_price_ma_order
	                order by count(*) desc;
                22.《机器学习实战 高清 中文版》的2.2.2 分析数据：使用Matplotlib创建散点图部分还需要再看看，因为书中的方法
	                用了4个参数，而自己只用了2个参数。还可以分别将close_price金叉ma5、MACD金叉，与KD、MACD、MA等指标一起，
	                创建散点图。
                21.看这个SQL，它的成功率达到了88%。
	                select
	                (select count(*) from mdl_macd_gold_cross t
	                join mdl_stock_analysis t1 on (t1.code_=t.stock_code and t1.date_=t.buy_date
	                and (t1.ma_trend=1))
	                where t.profit_loss>0)/
	                (select count(*) from mdl_macd_gold_cross t
	                join mdl_stock_analysis t1 on (t1.code_=t.stock_code and t1.date_=t.buy_date
	                and (t1.ma_trend=1)))
	                from dual;
                19.MA单调不递减中250日和120日的持续天数可以再加大一点，等这一轮测试完可以考虑调整一下。
                17.使用MACD金叉法交易，还盈利的情况下，(dif+dea)/2这个值每年都会有一些变化，行情好时变大，行情不好时变小。
	                此外，当(dif+dea)/2大到一定程度时，成功率会提升很快。可以从两个角度继续研究：
	                第一，画出一年内，MACD交易成功时，(dif+dea)/2的折线图，其中x轴是(dif+dea)/2逐渐递增，y轴是成功率逐渐递增。
	                其中应该从某个地方开始，成功率大幅提升，而这个点应该就是要找的阈值。
	                第二，从研究MACD金叉交易法失败的情况入手，将(dif+dea)/2从低到高排序，将最低的80%删除，而删除的那个位置
	                就是要找的阈值。
                16.正确的顺序应该是这样：首先在Model中找出成功率最高和收益率最高的过滤器组合，然后再在Robot中过滤器实现。
	                这样做的好处是最大限度地提高了成功率和收益率，此外如果想扩展Robot，比如每一个robot都有一个不同的交易策略，则这样
	                设计会比较容易扩展。
                15.现在250日均线要求20日，120日均线要求40日，也有可能这个参数正好相反，250日均线应该是40日，
                120日均线应该是20日，这个必须测试一下，然后在K线图上找答案。
                14.对自己以往的图片和选股进行深度挖掘，比如找到买卖的策略，然后计算下收益率和成功率。
                	写个机器人程序，机器人自己交易（10W开始），每日给出操作记录、持仓、盈亏。
                11.2021年春节后，每天都要将新股写到stock_info表中，现在发现又7开头的股票了，参考
                	http://www.yangzhix.com/
                10.先完成多线程，再开始将一个大的报告分成多个小的报告。
                9.考虑如何并行执行存储过程。
                8.WechatSubscriptionMain类只做了CreateClosePictureThread类，还是多空排列图。
                	暂时先做这么多，以后如果需要生成word文档时 ，可以参考这部分代码。
                7.线性回归可以这么做：某一天的开盘价、收盘价、最高价、最低价、6个均线、KD、macd、bias等作为
	                特征值，当天收盘价、第二天收盘价、或者几天后的收盘价作为标记，从而得出线性模型。
	                分类算法可以这么做：目标是查找买点和卖点，首先在K线图上找到买入的那一天，记录这一天的数据，
	                如：均线是否金叉、macd是否金叉、kd是否金叉、bias是否金叉，用0和1表示，这样就将连续数据变成了
	                离散数据，并且是两个分类。同理找到卖点，并记录数据，然后分别得出买点和卖点的模型。这个工作要
	                手工打标机，可以考虑用几个指数作为训练数据，股票作为测试数据。
                6.恢复restoreTableIncremental方法和backupDatabaseIncremental方法，这两个方法以后作为备份数据来用。
	                backupModelMACDGoldCrossIncrementalByJson方法和restoreModelMACDGoldCrossIncrementalByJson已经重构完了。
	                但是还没有测试。
	                FOREIGN_EXCHANGE_RECORD和FOREIGN_EXCHANGE表暂时先不重构。
                5.使用下面的接口，获取股票交易数据：
	                例如，http://img1.money.126.net/data/hs/kline/day/history/2015/1399001.json，获取深证成指2015年所有日线数据。
	                126的接口已经做好了，但163的接口也有数据了。以后126的接口只能作为替补，163当天的数据没有拿到的话，就用
	                126的。这个程序已经写好了，还需要测试一下，就从2020-11-3日开始。
	                1 000*
	                1 001*
	                1 002*
	                1 003*
	                1 300*
	                0 600*
	                0 601*
	                0 603*
	                0 605*
	                0 688*
                4.优化存储过程时，需要看看目录C:\mywork\gitcode-repository\from-old-computer\tdm下的东西，这里的
                	东西更新，有的已经优化过了。
                3.创业版现在涨跌幅度是20%，所以需要先知道是从哪一天开始的，然后再修改程序。writeModelTopStock
                2.继续执行writeModelTopStock方法生成数据，以便可以调用方法createTopStockUpDownPicture。
                1.关于乖离率，可以考虑画图，按照下面公式，取多少个均线可以根据具体情况，分别做向上乖离和向下乖离：
	                背离度=[(closePrice-ma5)/ma5+(closePrice-ma10)/ma10+(closePrice-ma20)/ma20+(closePrice-ma60)/ma60+(closePrice-ma120)/ma120+(closePrice-ma250)/ma250]/6
	                也可以考虑别的方法，例如做成类似KDJ那种，在某个区间内运动。
                0.腾讯云租个最便宜的服务器，这个作为反向代理，代理到家里的电脑，中间再做个vpn。
                	诉讼风险评估https的公钥密码是阿里云申请的免费证书
            </td>
        </tr>
        <tr>
            <td class="date">2020-04-02</td>
            <td class="content">
                以后依据stock_info表来决定采集哪些股票数据，所以要定期更新stock_info，这带来一个问题：是全量更新，还是增量更新。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-31</td>
            <td class="content">
                已经重构完的方法：<br>
                setProxyProperties
                gatherDatabaseStatistics
                insertAllRecords
                writeMovingAverageByDate
                writeMACDByDate
                createMovingAverageBullRankShortOrderPicture
                calculateMovingAverage
                writeMACD();
                writeStockIndex();
                backupCode

                不再使用的方法：
                writeUpDownByDate
                writeUpDown

                已经重构完的存储过程：
                pkg_stock_transaction_data：
                CALCULATE_FIVE
                CALCULATE_TEN
                CALCULATE_TWENTY
                CALCULATE_SIXTY
                CALCULATE_ONEHUNDREDTWENTY
                WRITE_MOVING_AVERAGE_BY_DATE
                WRITE_MACD_INIT
                WRITE_MACD_EMA
                WRITE_MACD_DIF
                WRITE_MACD_DEA
                WRITE_MACD_EMA_BY_DATE
                WRITE_MACD_DIF_BY_DATE
                WRITE_MACD_DEA_BY_DATE
                PKG_INDEX：
                WRITE_STOCK_INDEX

                不再使用的存储过程：
                stock_moving_average：*
                pkg_stock_transaction_data：
                WRITE_STOCK_TRANSACTION_DATA

                不再使用的表：
                stock_code
                stock_moving_average
                stock_weekend
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-25</td>
            <td class="content">
                1.stock_transaction_data表中，2020年4月1日前的基础数据和5日均线、10日均线、20日均线、60日均线、120日均线、ema12、ema26、dif、dea已经计算完了。<br>
                2.stock_week表中，2020年3月27日前的基础数据和rsv、k、d已经计算完了。<br>
                4.stock_index表中，2020年4月1日前的基础数据已经计算完了。<br>
                5.PKG_STOCK_TRANSACTION_DATA包的存储过程WRITE_MACD_INIT、WRITE_MACD_EMA、WRITE_MACD_DIF、WRITE_MACD_DEA
                	已经修改完了。并且也都执行完了。<br>
                6.PKG_STOCK_TRANSACTION_DATA包的存储过程WRITE_MACD_EMA_BY_DATE、WRITE_MACD_DIF_BY_DATE、WRITE_MACD_DEA_BY_DATE已经修改完了，找时间测一下。<br>
                7.PKG_WEEK包的存储过程WRITE_STOCK_WEEK已经修改完成，可以找时间测试一下了。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                《量化交易 如何建立自己的算法交易(高清)》看到了48页，该从“3.3 业绩度量”开始看了。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                stock-record.properties文件和stock-record.xml文件应该在使用的地方有区别，找找是什么却别。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                之前从网络上获取股票交易信息的代码是串行执行，需要修改为多线程并行执行，可以参考doccheck-engine项目。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                需要考虑如何备份代码和数据了。
            </td>
        </tr>
    </table>
    <!-***********************************************************************************************->
    <p>规则：</p>
    <table border="1" cellspacing="0">
        <tr class="table-header">
            <td>日期</td>
            <td>内容</td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                CSVRecord [comment=null, mapping=null, recordNumber=1, values=[
                日期, 股票代码, 名称, 收盘价, 最高价, 最低价, 开盘价, 前收盘, 涨跌额, 涨跌幅, 换手率, 成交量, 成交金额, 总市值, 流通市值]]
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                指数名称 代码 url参数<br>
                上证指数 000001 0000001<br>
                深证成指 399001 1399001<br>
                中小板指 399005 1399005<br>
                创业板指 399006 1399006<br>
                <br>
                stock_transaction_data表中一共有code_：3963<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '000%'; 完成 -- 452<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '001%'; 完成 -- 6<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '002%'; 完成 -- 962<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '003%'; 完成 -- 1<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '300%'; 完成 -- 853<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '600%'; 完成 -- 809<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '601%'; 完成 -- 201<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '603%'; 完成 -- 510<br>
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '688%'; 完成 -- 169
            </td>
        </tr>
    </table>
    <!-***********************************************************************************************->
    <p>常用SQL：</p>
    <table border="1" cellspacing="0">
        <tr class="table-header">
            <td>日期</td>
            <td>内容</td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                --truncate table stock_transaction_data;<br>

                select * from STOCK_TRANSACTION_DATA t;<br>

                select count(*) from stock_transaction_data;<br>

                select min(std.date_) from stock_transaction_data std;<br>

                select count(*) from stock_transaction_data std where std.open_price=0 or std.open_price is null;<br>

                select max(std.date_) from stock_transaction_data std;<br>

                select * from stock_transaction_data std where std.date_=to_date('1997-01-02', 'yyyy-mm-dd');<br>

                select * from stock_info si_ where si_.code='SH600715';
            </td>
        </tr>
    </table>
    <!-***********************************************************************************************->
    <p>已经完成的工作：</p>
    <table border="1" cellspacing="0">
        <tr class="table-header">
            <td>日期</td>
            <td>内容</td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                StockTransactionDataServiceImpl类的insertAllRecords方法已经看得差不多了，添加了科创版股票，这个方法还需要测试一下。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                应该开始考虑做一个笔记系统了。前后端分离的。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                代码得从StockTransactionDataServiceImpl类的245行开始看，此处抛出了一个异常：<br>
                Exception in thread "main" java.lang.NumberFormatException: Character N is neither a decimal digit
                number, decimal point, nor "e" notation exponential mark.<br>
                at java.base/java.math.BigDecimal.
                <init>(BigDecimal.java:518)<br>
                    at java.base/java.math.BigDecimal.
                    <init>(BigDecimal.java:401)<br>
                        at java.base/java.math.BigDecimal.
                        <init>(BigDecimal.java:834)<br>
                            at
                            cn.com.acca.ma.service.impl.StockTransactionDataServiceImpl.readStockTransactionDataList(StockTransactionDataServiceImpl.java:245)<br>
                            at
                            cn.com.acca.ma.service.impl.StockTransactionDataServiceImpl.insertAllRecords(StockTransactionDataServiceImpl.java:148)<br>
                            at cn.com.acca.ma.main.StockMain.insertAllRecords(StockMain.java:222)<br>
                            at cn.com.acca.ma.main.StockMain.main(StockMain.java:95)
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-25</td>
            <td class="content">
                看完了类StockTransactionDataDaoImpl的方法calculateMovingAverage。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-25</td>
            <td class="content">
                PKG_WEEK包的存储过程WRITE_STOCK_WEEK已经修改完成。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                1.stock_transaction_data表中up_down列已经有值了，计算这一列的存储过程用不着了。<br>
                2.以后使用表stock_info、stock_transaction_data、stock_week；不再使用表stock_moving_average、stock_weekend、stock_code。<br>
                3.以后使用包PKG_STOCK_TRANSACTION_DATA、PKG_STOCK_WEEK；不再使用包PKG_STOCK_MOVING_AVERAGE、PKG_STOCK_WEEKEND。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                StockMain类的writeMovingAverageByDate方法和calculateMovingAverage已经修改好了，但是还没有测试。
            </td>
        </tr>
        <tr>
            <td class="date">2020-03-19</td>
            <td class="content">
                stock_transaction_data表中，1997年至2019年的基础数据已经有了。
            </td>
        </tr>
        <tr>
            <td class="date">2020-04-02</td>
            <td class="content">
                StockIndex类的SH_INDEX和SZ_INDEX修改了，还需要看看以前改的代码对不对。
            </td>
        </tr>
        <tr>
            <td class="date">2020-05-20</td>
            <td class="content">
                从5月11日开始有些数据在dif和dea上残缺不全，从11日开始的数据已经删除，需要重新运行程序。
                11日的数据已经加进来了，但是仍然打印出了：
                14.532511452438696
                19.154556995503835
                14.532511452438696
                在计算12日的数据看一看。好像确实是11日数据的问题。
            </td>
        </tr>
        <tr>
            <td class="date">2020-05-27</td>
            <td class="content">
                windows7虚拟机已经安装好了，大智慧软件也已经下载了，可以安装了。
                周线级别kd图出错了，看来5月29日的数据得重新弄了。
            </td>
        </tr>
        <tr>
            <td class="date">2020-05-27</td>
            <td class="content">
                2.323行的sql本身没问题，但是change_range是复权后的涨跌百分比，无法表示是否除权了，
	                现在已经添加了last_close_price（前收盘）列，已经编写了存储过程PKG_TOOL.FILL_LAST_CLOSE_PRICE_IN_STOCK_TRANSACTION_DATA
	                来填充last_close_price列，但是还没有测试。这个列已经清空。
                3.考虑是否添加列ma250，因为有存储过程PKG_STOCK_TRANSACTION_DATA.SELECT_STOCK_WITH_250_SUPPORT。
            </td>
        </tr>
        <tr>
            <td class="date">2020-05-27</td>
            <td class="content">
                <![CDATA[
                2.着手恢复board表，Stock.xls和Board.xls文件已经有了，board表还差STOCK_AMOUNT列，接下来要继续编写
                python/board/board_util.python。
                安装了64位的python3.8，接下来要安装cx-oracle 64位了。这个已经安装好了。
                写的程序有点问题，应该用code。
                2.方法writeStockWeekMACD重构完了，已经执行了一部分，ema12和ema26已经有了，接下来要计算dif和dea
                了，这两部分大概要6小时，注意要注释一部分代码，。
                3.方法writeStockWeekMACDByDate重构完成了，找个正好周五结束时，测试一下。
                0.先从网上获取7月20日至7月24日的基础数据。
                4.创建了新类StockIndexWeek，对应的xml、mapper、存储过程包PKG_INDEX_WEEKEND也得改。
                已经从方法writeStockIndexWeek开始了。
                存储包PKG_INDEX_WEEK中还有1个存储过程没有重构，其余3个都已经重构并测试。
                0.先补全数据，仔细看表stock_transaction_data、stock_week、stock_index、stock_index_week。
                select * from stock_transaction_data t where t.code_='000001' order by t.date_ desc;
                select * from stock_week t where t.code_='000001' order by t.begin_date desc;
                select * from stock_index t where t.code_='000001' order by t.date_ desc;
                select * from stock_index_week t where t.code_='000001' order by t.begin_date desc;
                2.计算stock_index表移动平均线的存储过程和代码都写好了（所有和一天），还需要测试
                3.计算计算乖离率的存储过程和代码（所有的代码写好了，一天的还没写），还需要测试
                乖离率=(当日收盘价-N日内移动du平zhi均价)/N日内移动平均价╳100%
                如：5日乖离率=(当日收盘价-5日内移动平均价)/5日内移动平均价╳100%
                式中的N日按照选定的移动平均线日数确定,一般定为5,10。
                　由计算公式可以看出,当股价在移动平均线之上时,称为正乖离率,反之称为负乖离率；当股价与移动平均线重合,乖离率为零。在股价的升降过程中,乖离率反复在零点两侧变化,数值的大小对未来股价的走势分析具有一定的预测功能。正乖离率超过一定数值时,显示短期内多头获利较大,获利回吐的可能性也大,呈卖出信号；负乖离率超过一定数值时,说明空头回补的可能性较大,呈买入信号。
                -2.方法calculateAllBoardIndexFiveAndTenDayRate已经执行了，需要看看对不对。
                -1.基础数据从8月19日开始就无法从网上下载了。
                1.最后恢复生成报告，在这之前需要把其它的都弄完，方法calculateBoardIndexUpDownPercentage()、
                calculateBoardIndexUpDownRank()及其对应的计算每日数据的方法都已经重构好了，还没有测试。
                注意：由于每个存储过程都需要运行10个小时以上，因此，应该一部分一部分运行。
                -1.方法writeModelKDGoldCross()，数据对不上，需要查明原因：
                select count(distinct t.stock_code) from mdl_kd_gold_cross t;3772
                这个问题的原因已经找到，请看上面的备忘录。
                0.方法writeModelMACDGoldCross()执行完之后，数据对不上，需要查明原因：
                select count(distinct t.stock_code) from mdl_macd_gold_cross t;3794
                select count(distinct t.code_) from stock_transaction_data t;3949
                这个问题的原因已经找到，请看上面的备忘录。
                1.最后恢复生成报告，在这之前需要把其它的都弄完，方法writeModelMACDGoldCross()、
                writeModelKDGoldCross()及其对应的计算每日数据的方法都已经重构好了，还没有测试。
                0.方法writeModelMACDGoldCrossIncr的bug已经解决，但是mdl_macd_gold_cross表只能从头计算，
                先执行CAL_MDL_MACD_GOLD_CROSS，再执行CAL_MDL_MACD_GOLD_CROSS_INCR，由于执行
                CAL_MDL_MACD_GOLD_CROSS时间过长，因此要按照下面的做法执行：
                stock_transaction_data表中一共有code_：3963
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '000%'; -- 452
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '001%'; -- 6
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '002%'; -- 962
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '003%'; -- 1
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '300%'; -- 853
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '600%'; -- 809
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '601%'; -- 201
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '603%'; -- 510
                select count(distinct t.code_) from stock_transaction_data t where t.code_ like '688%'; -- 169
                1.writeModelTopStock方法执行后只生成1条记录，这个需要查明原因。
                2.PKG_MODEL_RECORD包中的存储过程也都重构好了，但有些还没有测试。
                3.在重构生成图形的createMACDGoldCrossScatterPlotPicture方法是，感觉存储过程可能有错。
                3.测试createSubNewStockAvgClosePicture方法，
                0.writeModelTopStock方法还没有执行2020年9月14日的计算
                5.生成报告的代码StockMain.generateReport抛出了异常:
                2020-09-12 00:33:30 [main] [INFO]
                [cn.com.acca.ma.dao.impl.ReportDaoImpl][findWeekendMacdEndDeviate][249] ->
                查询某一周（日期：从【20200907】至【20200911】），MACD底背离的股票
                Hibernate: {call pkg_week.FIND_WEEK_MACD_END_DEVIATE(?,?,?,?)}
                2020-09-12 00:36:58 [main] [WARN] [org.hibernate.engine.jdbc.spi.SqlExceptionHelper][logExceptions][143]
                -> SQL Error: 6533, SQLState: 65000
                2020-09-12 00:36:58 [main] [ERROR]
                [org.hibernate.engine.jdbc.spi.SqlExceptionHelper][logExceptions][144] -> ORA-06533: 下标超出数量
                ORA-06512: 在 "C##SCOTT.PKG_WEEK", line 704
                ORA-06512: 在 "C##SCOTT.PKG_WEEK", line 704
                ORA-06512: 在 line 1

                Exception in thread "main" org.hibernate.exception.SQLGrammarException: ORA-06533: 下标超出数量
                ORA-06512: 在 "C##SCOTT.PKG_WEEK", line 704
                ORA-06512: 在 "C##SCOTT.PKG_WEEK", line 704
                ORA-06512: 在 line 1

                at
                org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122)
                at
                org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
                at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
                at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
                at
                org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
                at
                org.hibernate.engine.jdbc.internal.proxy.CallableStatementProxyHandler.continueInvocation(CallableStatementProxyHandler.java:49)
                at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
                at com.sun.proxy.$Proxy21.executeUpdate(Unknown Source)
                at cn.com.acca.ma.dao.impl.ReportDaoImpl$1.execute(ReportDaoImpl.java:263)
                at org.hibernate.jdbc.WorkExecutor.executeWork(WorkExecutor.java:54)
                at org.hibernate.internal.SessionImpl$2.accept(SessionImpl.java:1936)
                at org.hibernate.internal.SessionImpl$2.accept(SessionImpl.java:1933)
                at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.coordinateWork(JdbcCoordinatorImpl.java:211)
                at org.hibernate.internal.SessionImpl.doWork(SessionImpl.java:1954)
                at org.hibernate.internal.SessionImpl.doWork(SessionImpl.java:1940)
                at cn.com.acca.ma.dao.impl.ReportDaoImpl.findWeekendMacdEndDeviate(ReportDaoImpl.java:255)
                at cn.com.acca.ma.service.impl.ReportServiceImpl.storeReport(ReportServiceImpl.java:288)
                at cn.com.acca.ma.main.StockMain.generateReport(StockMain.java:538)
                at cn.com.acca.ma.main.StockMain.main(StockMain.java:185)
                Caused by: java.sql.SQLException: ORA-06533: 下标超出数量
                ORA-06512: 在 "C##SCOTT.PKG_WEEK", line 704
                ORA-06512: 在 "C##SCOTT.PKG_WEEK", line 704
                ORA-06512: 在 line 1

                at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
                at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
                at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
                at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
                at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
                at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
                at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:204)
                at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1041)
                at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
                at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
                at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3665)
                at oracle.jdbc.driver.OracleCallableStatement.executeUpdate(OracleCallableStatement.java:4739)
                at
                oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1352)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at
                org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
                ... 14 more
                5.mdl_top_stock表中6月10日至6月12日之间缺数据。
                4.报告已经可以生成了，但是出现了中文乱码，位置是“日线级别某一段时间内上涨股票的前100名”后面，已经添加
                utf-8了，在运行一次看看是否解决了。
                7.9月23日的方法writeModelMACDGoldCrossIncr和writeModelTopStock还没有执行。
                6.存储过程WRITE_MOVING_AVERAGE_BY_DATE已经重写，重写之前18分钟，下次计算下重写后多少时间。
                5.mdl_top_stock表中2月19日至2月25日之间应该有数据。
                5.9月28日至9月30日的数据还差generateReport方法没有执行。
                5.mdl_top_stock表中2019年11月19日到2019年12月02日之间没有数据。
                6.mdl_top_stock表中数据差一部分数据，要查清楚。
                7.stock_transaction_data表中基础数据已经有了，但只是到达2020年11月2日，MACD数据还没有计算。
                [cn.com.acca.ma.dao.impl.StockTransactionDataDaoImpl][writeMACD][738] -> 所有股票的MACD中的ema数据计算完成
                注意：都已经配置好了，dif和dea都已经更新为null了，直接执行writeMACD方法即可，亦可以分别执行dif和dea。
                8.没有2020-10-12的mdl_top_stock的记录。
                9.select * from stock_transaction_data t where t.rsv is not null or t.k is not null or t.d is not null;
                9.已经可以使用jdbcTemplate操作mdl_stock_analysis表了，但具体的内容还没有。
                计算mdl_stock_analysis表的全部数据和每日数据的存储过程已经写好了，但还没有测试。
                8.日线级别KD的存储过程和代码已经都写好了，包括计算全部和计算某一天的，还没有测试。
                writeKD方法执行的时间很长，每一个存储过程大概16、17个小时，需要分开执行。
                8.方法writeModelStockAnalysis和writeModelStockAnalysisByDate都测试通过了，
                stock_transactin_data表的所有kd指标也都计算完了，先清空mdl_stock_analysis表，再计算
                mdl_stock_analysis表的数据。
                8.2020年10月30日的board_index、stock_index、mdl_top_stock数据已经计算完了，但是周线级别的
                数据还没有计算。
                8.有不该执行的方法：
                2020-11-16 10:48:55 [main] [INFO]
                [cn.com.acca.ma.dao.impl.StockTransactionDataDaoImpl][writeModelTopStock][47] -> write model top stock
                object begin
                Hibernate: {call PKG_MODEL_RECORD.WRITE_MDL_TOP_STOCK(?,?)}
                2020-11-16 16:19:53 [main] [INFO]
                [cn.com.acca.ma.dao.impl.StockTransactionDataDaoImpl][writeModelTopStock][58] -> write model top stock
                object finish
                2020-11-16 16:19:56 [main] [INFO] [cn.com.acca.ma.dao.impl.StockWeekDaoImpl][writeStockWeekByDate][25]
                -> 开始计算所有股票在日期【20201026】和【20201030】之 间，周线级别的基础数据
                2020-11-16 16:20:16 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][288] ->
                HHH000038: Composite-id class does not override equals(): cn.com.acca.ma.model.StockMovingAverage
                2020-11-16 16:20:16 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][289] ->
                HHH000039: Composite-id class does not override hashCode(): cn.com.acca.ma.model.StockMovingAverage
                2020-11-16 16:20:17 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][288] ->
                HHH000038: Composite-id class does not override equals(): cn.com.acca.ma.model.Report
                2020-11-16 16:20:17 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][289] ->
                HHH000039: Composite-id class does not override hashCode(): cn.com.acca.ma.model.Report
                2020-11-16 16:20:17 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][288] ->
                HHH000038: Composite-id class does not override equals(): cn.com.acca.ma.model.ForeignExchangeRecord
                2020-11-16 16:20:17 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][289] ->
                HHH000039: Composite-id class does not override hashCode(): cn.com.acca.ma.model.ForeignExchangeRecord
                2020-11-16 16:20:17 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][288] ->
                HHH000038: Composite-id class does not override equals(): cn.com.acca.ma.model.StockIndexWeekend
                2020-11-16 16:20:17 [main] [WARN] [org.hibernate.mapping.RootClass][checkCompositeIdentifier][289] ->
                HHH000039: Composite-id class does not override hashCode(): cn.com.acca.ma.model.StockIndexWeekend
                2020-11-16 16:20:17 [main] [INFO]
                [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl][configure][96] ->
                HHH000402: Using Hibernate built-in connection pool (not for production use!)
                2020-11-16 16:20:17 [main] [INFO]
                [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl][configure][130] ->
                HHH000115: Hibernate connection pool size: 20
                2020-11-16 16:20:17 [main] [INFO]
                [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl][configure][133] ->
                HHH000006: Autocommit mode: true
                2020-11-16 16:20:17 [main] [INFO]
                [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl][configure][147] ->
                HHH000401: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@127.0.0.1:1521:ADAM]
                2020-11-16 16:20:17 [main] [INFO]
                [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl][configure][152] ->
                HHH000046: Connection properties: {user=c##scott, password=****, autocommit=true, release_mode=auto}
                2020-11-16 16:20:28 [main] [INFO] [org.hibernate.dialect.Dialect][
                ][127] -> HHH000400: Using dialect: org.hibernate.dialect.OracleDialect
                2020-11-16 16:20:28 [main] [WARN] [org.hibernate.dialect.Oracle9Dialect][
                ][62] -> HHH000063: The Oracle9Dialect dialect has been deprecated; use either Oracle9iDialect
                or Oracle10gDialect instead
                2020-11-16 16:20:28 [main] [WARN] [org.hibernate.dialect.OracleDialect][
                ][48] -> HHH000064: The OracleDialect dialect has been deprecated; use Oracle8iDialect
                instead
                2020-11-16 16:20:28 [main] [INFO]
                [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator][initiateService][73]
                -> HHH000268: Transaction strategy:
                org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
                2020-11-16 16:20:28 [main] [INFO]
                [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory][
                ][48] -> HHH000397: Using ASTQueryTranslatorFactory
                终止批处理操作吗(Y/N)? y

                D:\github-workspace\hades\dev-project\adam>
                8.11月3日的writeKDByDate、writeModelTopStock、writeModelStockAnalysisByDate
                方法还没有执行，因为怕出错。第二天早上再执行。
                8.开始重新执行writeModelMACDGoldCross方，注意存储过程中股票是分批执行的
                8.方法writeModelTopStock在11月5日的数据还没有，所以计算时间为11月5日至11月6日。
                10.方法writeStockTransactionDataAll已经写好了，好需要测试一下。
                8.计算每日均线的代码有错，所有数据得重新计算。借这个机会试一试数据分表的效率如何。如果效率高，则
                划分为两个表，如stock_transaction_data和stock_transaction_data_all。每天都同时向表
                stock_transaction_data和stock_transaction_data_all中插入新数据，只从stock_transaction_data
                表中删除最旧的数据，这个得写程序来实现。
                先把均线计算完，然后分表，最后计算某一日的均线，看看效率如何。
                12.mdl_top_stock、mdl_macd_gold_cross、mdl_stock_analysis这三个表的数据只到11月9日，因此在计算
                10日的数据。其他表的数据已经到11月10日了，因此在计算11日的数据。
                12.在计算stock_index表的2020-11-18日数据时抛出异常，需要重新计算。
                11.从11月3日开始stock_transaction_data表中的所有macd数据都是错的。而且stock_transaction_data_all也是
                错的。先把stock_transaction_data表的数据弄好，再同步到stock_transaction_data_all表中。
                刚刚重新计算11月3日stock_transaction_data表中的数据，是正确的。
                7.恢复数据
                select max(t.sell_date) from mdl_macd_gold_cross t;
                select max(t.date_) from board_index t;
                select max(t.date_) from stock_index t;
                select max(t.date_) from mdl_top_stock t;
                select max(t.date_) from stock_transaction_data t;
                select max(t.date_) from mdl_stock_analysis t;

                select max(t.end_date) from STOCK_INDEX_WEEK t;
                select max(t.end_date) from stock_week t;

                现状：
                stock_transaction_data表的最大日期是2020-11-30。
                board_index表最大日期2020-11-30。
                stock_index表的最大日期是2020-11-30。
                mdl_top_stock表的最大日期是2020-11-30。
                mdl_macd_gold_cross表的sell_date最大日期是2020-11-27。
                mdl_stock_analysis表的最大日期是2020-11-30。

                STOCK_INDEX_WEEK表的end_date最大日期是2020-11-27。
                stock_week表的end_date最大日期是2020-11-27。

                mdl_kd_gold_cross表的sell_end_date最大日期是2020-08-28。
                10.stock_index表在11月30日的数据抛出异常。
                10.2020-12-01是用126的接口获取数据的，有的字段还是空。
                supplementDataBy163Api方法有bug。
                先计算21日其他，再补充21日，再计算22其他。
                8.从stock_transaction_data表中删除旧数据的方法已经写完，还没有测试。
                9.1月13日使用的是126接口。
                8.注意：stock_transaction_data_all表中有些记录在turnover等字段上是空。
                8.1月20日是调用126接口，有些列还没有数据。
                10.1月27日使用的是126的接口，部分列为空。
                10.2021年2月1日使用的是126的接口，有些字段还是空。
                8.开发WechatSubscriptionMain类及其相关的功能。
                代码写到了WechatSubscriptionServiceImpl.syncHandleBasedOnMACD方法。
                先把代码都写完了再在周末测试，否则可能会有多出来的数据。
                11.存储过程WRITE_STOCK_INDEX_HA_BY_DATE用程序执行没有效果，但是在plsql developer中执行就可以。
                13.2021年2月24日使用126接口获取基础数据，有几个字段是空。
                15.dao方法filterByMANotDecreasing好像无法执行存储过程。
                17.创建了robot和robot_stock_transaction_record两个表，其中可能还需要继续添加列。
                16.方法filterByMANotDecreasing、filterByPercentageOfCurrentClosePriceCompareToSomeTimeHighestPrice、
                filterByMACDGoldCross都已经写完了，还需要测试一下。
                15.2021年3月5日使用的是126接口，因此有些字段是空的。本次并没有向stock_transaction_data_all表中转储数据。
                16.RobotMain的三个过滤条件都执行完了，结果在robot_stock_filter表中，好好研究一下，再确定接下来怎么做。
                其中均线单调不递减，可以考虑：“# 如果为120,250，则表示要求同时满足两个条件”。
                17.writeChangeRangeExRightByDate方法和writeChangeRangeExRight方法已经写好了，需要测试一下。
                18.writeChangeRangeExRight方法只能更新stock_transaction_data表，但stock_transaction_data_all表还需要再
                次执行sql。
                21.执行select * from stock_transaction_data_all t where t.code_='000006' order by t.date_
                desc;，
                会发现有问题：3月8日~10日的数据都是错位的。现在这三天的数据已经删除了，并且列的顺序也修改了，然后先重启oracle,
                再从stock_transaction_data表中导入这三天的数据，看看数据是否还是错位的。
                stock_transaction_data_all表已经删除后重新创建了，回头程序执行完再看看是否还有问题。
                20.FNC_STOCK_XR需要再改一下，使用change_range_ex_right，这样能快一点。已经修改了，还要测试一下。
                首先由于last_close_price是除权后的，因此由他计算出来的change_range_ex_right也是除权后的，此外
                writeChangeRangeExRightByDate方法和writeChangeRangeExRight方法应该也错了，最后导致FNC_STOCK_XR方法也错了。
                可以参考calUpDownPercentageByDate方法和calculateUpDownPercentage方法。
                回头执行一下calculateUpDownPercentage方法，这个已经修改过了。
                24.writeChangeRangeExRight方法和writeChangeRangeExRightByDate方法都已经改完了，回头测试一下。
                可以从表robot_stock_filter表中选择股票。
                已经运行完了，需要查看表robot_stock_filter。
                22.方法writeChangeRangeExRightByDate报错：
                2021-03-17 23:55:58 [main] [WARN]
                [org.hibernate.engine.jdbc.spi.SqlExceptionHelper][logExceptions][143] -> SQL Error:
                1403, SQLState: 02000
                2021-03-17 23:55:58 [main] [ERROR]
                [org.hibernate.engine.jdbc.spi.SqlExceptionHelper][logExceptions][144] -> ORA-01403:
                未找到任何数据
                ORA-06512: 在 "C##SCOTT.PKG_STOCK_TRANSACTION_DATA", line 1576
                ORA-06512: 在 "C##SCOTT.PKG_STOCK_TRANSACTION_DATA", line 1576
                ORA-06512: 在 line 1
                22.方法filterByLessThanClosePrice和filterByXr方法写完了，需要测试一下。
                19.FNC_STOCK_XR方法已经从方法filterByPercentageOfCurrentClosePriceCompareToSomeTimeHighestPrice中删除了，
                先执行filterByXr方法，再执行filterByPercentageOfCurrentClosePriceCompareToSomeTimeHighestPrice方法。
                这个已经执行完了，可以查看robot_stock_filter表，看看是否正确。
                20.2021年3月24日、25日、26日的记录使用的是126的接口。暂时没有向stock_transaction_data_all表中插入数据。
                19.PKG_ROBOT中的存储过程被重新设计了，都要重写。
                19.2021年3月31日、4月1日的基础数据是使用126的接口，有些字段还是空。也没有写入到stock_transaction_data_all表中。
                23.可以考虑写个方法，将RobotMain中的方法放到一起，定义一个开始时间和结束时间，这样就可以计算一段时间的
                robot_stock_transaction_record和robot_account了，也比现在每一天都要手工修改配置文件方便。
                23.方法filterByClosePriceGoldCrossMA5已经写完了，还需要测试一下，此外方法sell也需要修改。
                22.存储过程CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS和CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS_INCR已经写完了，java
                代码也写了，CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS已经测试，但CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS_INCR
                还没有测试。CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS表中profit_loss成功率到达了98%！！！
                需要打开大智慧对比一下。
                20.RobotMain类已经写完了，可以从2020年8月1日开始测试一下。
                21.2021年4月20日的基础数据是使用126接口的，还有几列是空的。
                20.printBuySellSuggestionBySimple方法已经写完了，但返回值还需要优化一下。此外还需要将其放入到
                doBuyAndSellByBeginDateAndEndDate方法中。
                23.修改方法createMACDSuccessRatePicture，改为最近20日的成功率。但有些地方还有些问题。
                22.创建关于close_price金叉ma5的折线图，取最近20天的成功率，也许是波浪形的，从而发现时间窗口。
                这个已经做了，但是图形显示的效果不好。
                28.打印买卖建议一定要写到文件里。
                33.好像无法打印出2020年7月1日的买卖建议，也就是第一天的买卖建议打印出来的是两个空的数组。
                32.stock_index表中没有4月27日的记录。
                29.4月26日、27日使用126接口获取基础数据，有些列是空。因此没有向stock_transaction_data_all表中导入数据。
                32.正在运行的程序：补全29日的数据，计算29日的数据。30日网上的数据用163的接口获取到了，其他的基础数据还没有计算。
                29.4月29日的基础数据使用的是126的接口，部分列是空，stock_transaction_data_all表也没有这一天的数据。
                31.包pkg_month中的存储过程都写完了，都能编译。还有以下存储过程没有测试：WRITE_MONTH_KD_BY_DATE_RSV、WRITE_MONTH_KD_BY_DATE_K、
                WRITE_MONTH_KD_BY_DATE_D、WRITE_MONTH_MACD_EMA_BY_DATE、WRITE_MONTH_MACD_DIF_BY_DATE、WRITE_MONTH_MACD_DEA_BY_DATE。
                30.自媒体上可以用002180纳斯达，使用薛思通道。
                31.存储过程WRITE_MONTH_MACD_EMA_BY_DATE、WRITE_MONTH_MACD_DIF_BY_DATE、WRITE_MONTH_MACD_DEA_BY_DATE还应该再测试一下。
                31.stock_month表坏了，得重新建，然后再生成数据。
                30.方法backupDatabaseMass已经重构好了，还没有测试。stock_month表还得重新备份以下。
                29.方法已经都写完了，还没有测试。
                正在测试的：writeStockWeekMAByDate。
                测试通过的：writeStockMonthMA、writeStockMonthMAByDate、writeStockWeekMA
                26.在stock_transaction_data表中创建HeiKinAshi列，然后robot根据这个来进行买卖交易。现在其他的都做完了，就差把下面这段代码
                复制到存储过程PKG_ROBOT.sell中了：
                -- 平均K线是否从上涨趋势变为下跌趋势
                if p_sell_standard = 3 then
                if c##scott.FNC_JUDGE_HEI_KIN_ASHI_DOWN(p_sell_date,
                row_robot_stock_transaction_record.stock_code) = -1 then
                continue;
                end if;
                end if;
                30.由于mdl_stock_analysis表和mdl_stock_month_analysis表还是没有数据，因此5月7日涉及到这两个表的方法都没有执行，等下面
                的测试完成后再补上。
                29.需要测试的：、writeModelStockAnalysisByDate
                已经运行完，但还没有分析是否正确的：、。
                测试通过的：writeModelStockAnalysis、writeModelStockMonthAnalysis、writeModelStockMonthAnalysisByDate
                32.收盘价金叉ma5有问题。
                23.机器人程序应该可以调整自己的仓位，比如如果有一笔交易赚钱了，则仓位加一，否则减一，但最少要有一成仓位。
                或者可以考虑根据最近一段时间的最高成功率和最低成功率，再计算当前的成功率，然后确定应该是什么仓位。
                31.《Robot程序模型测试结果》中已经有一个测试完了，可以分析了，可以分析的表是以temp开头的那三个表。
                33.python目录打包失败。
                36.2021年5月14日的基础数据是使用126的接口，有些列还是空的。stock_transaction_data_all表也没有导入数据。
                38.stock_transaction_data表的MACD相关字段从5月6日这周开始就没有数据了。
                34.控制仓位时，不用求最小成功率，因为当行情好的年份，最小成功率也会提高。最小成功率应该应该一直就是0。
                最大成功率可以考虑最近半年，而不是最近一年。
                29.如果把股票名称放到百度上去搜索可以看到搜索到的条目的数量，因此可以写个程序，把所有股票都搜索一遍，按照搜索到的条目
                降序排列，这样就等于是找到热门的股票了，然后写文章时就按照这个顺序写就行了。
                遇到了百度安全认证额问题，看看单纯地加大sleep的时间是否可以。
                31.5月18日、19日用的是126的接口，有些字段是空，stock_transaction_data_all表也没有导入数据。
                33.存储过程CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS、CAL_MDL_CLOSE_PRICE_MA5_GOLD_CROSS_INCR写错了，得重新写。
                这样的话存储过程FIND_CLOSE_PRICE_MA5_GOLD_CROSS_SUCCESS_RATE返回的成功率可能就不准了
                31.存储过程FIND_HEI_KIN_ASHI_UP_DOWN_SUCCESS_RATE写完了，还没有测试过。
                30.存储过程CAL_MDL_HEI_KIN_ASHI_UP_DOWN_INCR有错，现已经修改了。已经运行了，日期是5月19日，回头看看对不对。
                如果程序是正确的话，就可以继续计算下去了。
                29.表MDL_HEI_KIN_ASHI_UP_DOWN的记录到达了5月19日（sell_date），可以继续向下计算了。
                30.向表MDL_ALL_GOLD_CROSS中插入记录的存储过程已经开始运行了，回头看看对不对。
                120_250 31.8222438865% 2.307717117556%
                60_250 24.50102263911% -1.453486846745%
                20_250 18.56885253111% -2.723372916391%
                10_250 16.43488453131% -2.671359964519%
                5_250 13.5612891706% -2.423922194446%
                c_250 9.458039957982% -0.842065085126%
                60_120 30.89948836441% -1.112864829179%
                20_120 24.21867046727% -1.212222589840%
                10_120 21.28978837303% -1.660205850070%
                5_120 18.32370428539% -1.328810719093%
                c_120 12.5905022326% -0.3019829333836%
                20_60 28.57682315267% -0.8544542625823%
                10_60 26.58077279443% -0.4416558986302%
                5_60 23.77276966709% -0.1506464015836%
                c_60 17.19306659358% 0.3451286066632%
                10_20 36.79203715992% 0.8179115063039%
                5_20 32.30757056676% 0.729973514187%
                c_20 25.36436147999% 0.7181011964419%
                5_10 34.98419256422% 0.36136916519%
                c_10 28.90932611471% 0.4583367530860%
                c_5 34.85086736784% 0.5317772107635%
                29.完成了存储过程CAL_MDL_KD_GOLD_CROSS和对应的方法，这是计算日线级别KD金叉的，已经运行了，回头看看对不对。
                如果情况好的话，可以考虑在单边市用MACD，震荡市用KD。
                成功率：36.0911391910884% 每笔盈亏：0.344420725756077%
                29.temp开头的三个表都是最新的数据，需要分析一下。
                31.存储过程filter_by_ma_not_decreasing可能有问题，需要好好测试一下。
                31.6月22日使用的是126接口，有些列还是空的。
                32.temp开头的几个表可以分析了。
                29.可以考虑做预先计算在什么条件下MACD金叉的程序了，这样可以在每天14：30至15：00之间计算完，再做交易。
                方法preCalculateTransactionCondition已经写完了，表REAL_TRANSACTION_CONDITION中已经有数据了，
                还需要对照K线图看看对不对。
                32.6月30日使用的是126接口，有些列还是空的。
                31.先要将stock_info表的url_param字段填充数据。
                32.7月8日的股票基础数据是用126接口，的有些列还是空。
                33.7月13日使用的是126接口。stock_transaction_data_all表没有导入。stock_index表也是空，是不是这个接口用不了了？
                32.RealTransactionMain应该创建一个定时任务。
                33.heikinashi算法应该有问题，因为持股数量永远为0。这个已经修改了，测试一下看看对不对。
                33.7月27日使用了126的接口，stock_transaction_data_all表里没有插入数据。
                32.temp开头的几个表可以分析了。
                31.RealTransactionMain的主体代码已经差不多了，还需要考虑real_account和real_stock_transaction_record表怎么用。
                是不是这两个表都只能手工输入。
                31.stock_month表中没有6月的数据。
                32.表MDL_ALL_GOLD_CROSS刚刚备份完，然后改测试恢复了。
                32.MDL_KD_GLOD_CROSS表备份的程序已经可以了，恢复程序还需要测试一下。
                32.每日计算mdl_macd_gold_cross表数据的存储过程好像有点问题。在8月9日时没有新记录。在8月10日时也没有新记录，但是将日期调整
                为20210809时，却有8月9日的数据了。
                32.mdl_stock_month_analysis表的备份和恢复已经弄完，还要再看一下。
                32.8月12日使用的是126接口，有的列还是空（这个已经弄完了）。stock_index表也没有8月12日的数据，看来这个表的数据要重新计算了。
                32.再看看备份周线级别数据的日期，可能有重复的
                32.stock_month表已经备份，还要测试一下恢复。
                33.表real_transaction_condition中的数据有问题，如002010。
                32.RealTransactionMain还没有执行。
                32.表stock_transaction_data已经备份，还需要测试恢复。
                31.8月20日，real开头的表还没有改。
                33.批量导入数据时，stock_info出现了中文乱码。
                33.macd的dea还没有计算。
                35.计算周五的数据时太慢了，从9月15日12点半到才完成。等到下一个周五时试试在恢复数据时，将id去掉是否会快一点。
                36.其他表：正在重新计算
                stock_transaction_data表：9月10日
                34.恢复后的mdl_top_stock表，8月14日至8月26日的记录中有中文乱码，8月27日没有中文乱码。只能重新计算一下试试了。
                注意，计算完之后要先备份一下数据。
                38.9月17日stock_index表从网上获取数据失败，这一天没有数据，而且stock_index_week表在这一天也没数据。
                38.9月28日还没有增量备份。
                37.方法writeModelAllGoldCross还没有执行完。
                2021-09-29 05:35:26 [main] [INFO]
                [cn.com.acca.ma.model.ModelAllGoldCross][writeModelAllGoldCross][41] ->
                海量地向表MDL_CLOSE_PRICE_MA5_GOLD_CROSS中插入数据结束
                2021-09-29 05:35:26 [main] [INFO]
                [cn.com.acca.ma.model.ModelAllGoldCross][writeModelAllGoldCross][31] ->
                开始海量地向表MDL_CLOSE_PRICE_MA5_GOLD_CROSS中插入数据，参数type为【c_60】
                Hibernate: {call PKG_MODEL_RECORD.CAL_MDL_ALL_GOLD_CROSS(?)}
                2021-09-29 05:53:34 [main] [INFO]
                [cn.com.acca.ma.model.ModelAllGoldCross][writeModelAllGoldCross][41] ->
                海量地向表MDL_CLOSE_PRICE_MA5_GOLD_CROSS中插入数据结束
                2021-09-29 05:53:34 [main] [INFO]
                [cn.com.acca.ma.model.ModelAllGoldCross][writeModelAllGoldCross][31] ->
                开始海量地向表MDL_CLOSE_PRICE_MA5_GOLD_CROSS中插入数据，参数type为【10_20】
                Hibernate: {call PKG_MODEL_RECORD.CAL_MDL_ALL_GOLD_CROSS(?)}
                33.20211015日使用的是126的接口，有的字段为空，先向stock_transaction_data_all表中插入数据，然后不全stock_transactin_data表后，再补全它。
                32.已经创建了表mdl_top_stock_detail，用于存储每只股票的代码和涨跌幅度。可能得写个存储过程WRITE_MDL_TOP_STOCK_DETAIL来代替
                WRITE_MDL_TOP_STOCK了。
                30.存储过程FIND_TOP_STOCK得出的股票，应该也研究一下。
                36.mdl_top_stock_detail表的增量备份和海量备份已经做完，还没有测试。
                30.存储过程WRITE_MDL_TOP_STOCK_DETAIL已经写好了，还需要测试一下。
                33.10月25日用的是126的接口。
                33.10月27日使用的是126的接口。
                32.mdl_top_stock_detail表中还没有10月22日的记录。
                29.每天计算mdl_top_stock_detail表，21、34、55日，大概一个月后可以试试了。
                30.WRITE_MDL_TOP_STOCK_DETAIL已经开始重写了，WRITE_MDL_TOP_STOCK_DETAIL2回头可以注释掉了，WRITE_MDL_TOP_STOCK可以不用管了。
                31.mdl_top_stock_detail表还没有11月11日的数据。
                30.存储过程pkg_stock_transaction_data.FIND_LAST_STOCK应该没有错，他是跌幅最大的在第一行，如果加上个符号可能更直观。
                这个可以等到周末生成报告时测试。
                33.有些时候仓位很低，为了充分利用资金，需要看看常用的三个交易策略（再加上日线级别KD）在成功率上是否不同步。
                34.macd买入法的仓位似乎有问题，为什么是6个月前平均10天内的成功率呢？好像有一个bug，就是存储过程和java代码正好相反了，现在已经改了。
                看看改完之后的效果。
                33.现在的MACD交易模型的成功率还是太低，下面SQL只有36%，应当想办法提高到50%~60%。
                select
                (select count(*) from mdl_kd_gold_cross t where t.profit_loss>0)/
                (select count(*) from mdl_kd_gold_cross t)*100
                from dual;
                34.mdl_top_stock_detail表中还没有11月19日的数据。
                29.mdl_top_stock_detail先不用增量备份，等到有大约一个月的数据时再开始备份。
                30.考虑一下追涨的模型，应该只需要将现在的代码改一下就可以了。
                32.LaboratoryMain.createModelTopStockDetailPicture创建每一只股票涨跌的折线图。
                36.存储过程CAL_MDL_KD_GOLD_CROSS_INCR已经写完了，但还没有测试。
                35.dump文件已经上传到了百度网盘。数据库对象已经导出了，但提交到了github时超时了，还得重新push一下，然后再打分支。
                数据库ADAMTEST已经创建好了，但数据和对象还没有导入。
                但是现在系统已经上线了，如果该程序可能会影响每天的使用，解决方法如下：
                应当创建一个新的数据库adam_1_1，和新的代码分支adam_1.1，用于测试新的算法。注意adam数据库中的数据要先导出。
                31.mdl_top_stock_detail表4月21日至5月5日、12月10日还没有数据。
                34.mdl_top_stock_detail表没有12有ue5日的数据。
                33.存储过程CAL_MDL_UP_DOWN_PERCENTAGE_MA_GOLD_CROSS已经写完，在向percentage_*_ma*列中插入数据之后就可以测试了。
                35.mdl_top_stock_detail表没有12月24日的数据，然后ma列都得重新算。
                35.生成report的方法报错。
                34.RobotMain中的方法都改完了，但还没有测试。
                RealTransactionMain.realTimeJudgeConditionAndGiveSuggestion也写完了，但还没有测试。
                28.将方法backupDatabaseMass导出的dmp文件全都测试一遍，因为有些dmp文件的大小不对。在这之前需要先做增量备份。
                海量备份测试过的表：
                增量备份、恢复测试通过的表：board,board_index,foreign_exchange,foreign_exchange_record,mdl_all_gold_cross,
                MDL_CLOSE_PRICE_MA5_GOLD_CROSS,mdl_kd_gold_cross,mdl_macd_gold_cross,mdl_stock_analysis,mdl_stock_month_analysis,
                MDL_TOP_STOCK,MDL_WEEK_KD_GOLD_CROSS,REPORT,STOCK_INDEX,STOCK_INDEX_WEEK
                36.表mdl_top_stock_detail在12月29日还没有数据。
                30.MDL_TOP_STOCK_DETAIL表有些字段也还没有数据。备份也得重新运行。
                30.MDL_PERCENTAGE_MA_GOLD_CROSS表中还没有数据。
                18.表stock_transaction_data_all的数据最早的是2011年1月4日。考虑是否有必要解决。
                由于表stock_transaction_data_all中的数据被误删除，因此要考虑备份数据了。
                35.感觉bucky项目的FindSimilarTestQuestionTask还需要再看看。
                38.E:\investment\Table.xls是从同花顺里导出的文件，和同花顺对比可以知道哪些是可以融资融券的，大概
                有1000只左右。
                37.应该创建一个表robot_account_log，表示所有帐户每日的记录。在每日交易结束后，向这个表中插入数据。
                38.从2021年7月8日开始测试，存储过程update_robot_account_after_b_s之前有错，现在改了，看看改的对不对。
                37.考虑是否在robot_stock_transaction_record表中添加盈亏率和盈亏额两列。
                34.macd死叉，close_price_ma5死叉，hei_kin_ashi下跌，kd死叉算法的所有方法都写完了。方法
                writeModelMACDDeadCross、writeModelClosePriceMA5DeadCross、writeModelHeiKinAshiDownUp、
                writeModelKDDeadCross已经测试通过，正在运行。方法writeModelMACDDeadCrossIncr、
                writeModelClosePriceMA5DeadCrossIncr、writeModelHeiKinAshiDownUpIncr、writeModelKDDeadCrossIncr
                还没有测试。
                36.stock_transaction_data表中，从1月25日至1月28日的基础数据有，但其他表的数据都没有，此外25日死叉的
                incr方法也没数据，具体可以一个表一个表查看。
                39.2月7日使用了126的接口，stock_transaction_data_all表也没数据。
                37.robot_stock_transaction_record表已经有盈亏额和盈亏率的字段了，real_stock_transaction_recrod表也
                可以考虑是否要有。还要考虑是否需要real_account_log表。
                33.接下来可以考虑，如果所有算法的成功率都没有到达40%，则应当就不再买入股票了。
                最近多少天内的平均成功率如果低的话，当大于这个阈值时才进行买卖交易（单位：%）就应该高。
                可以先从5天，80%开始，寻找成功率高的组合。
                但是如果天数太少，对MACD这种趋势型的算法会有很多交易没有算在内。可能以sell_data为准更合适。
                36.temp开头的表必须要分析一下，日期是2011-01-01至2011-12-12。接下来会是10、50参数测的测试了。
                测试结果28.25。
                35.nn_task.c文件从最后while开始应该有错，导致最后计算的结果不对。
                36.开发一个java向邮箱发邮件的功能，通过定时任务将买卖建议发送到邮箱里。
                32.bucky需要存储从网上下载的图片，将网页变为图片的方法：F12-->ctl+shift+p-->full-->snapshot
                经过测试，技术上可行，参考PictureSaveTest类和https://www.jb51.net/article/169046.htm，
                接下来就保存这个网页：https://blog.csdn.net/z_ryan/article/details/79685072
                注意：mongodb上创建了一个叫file的数据库。
                38.robot程序，成功率40%的测试已经完成了，数据在temp表中。
                37.adam项目必须要做定时发送买卖建议的功能了。
                36.可以考虑测试一下周线级别收盘价金叉5日均线的收益。
                38.存储过程WRITE_WEEK_C_R_E_R和WRITE_WEEK_C_R_E_R_BY_DATE都写完了，但还没有测试。
                注意：stock_week表中的change_range_ex_right列式无法判断这一周之内有没有除权的。
                37.存储过程CAL_MDL_WEEK_ALL_GOLD_CROSS还没有写完。
                33.表mdl_macd_dead_cross、mdl_close_price_ma5_dead_cross、mdl_hei_kin_ashi_down_up和
                mdl_kd_dead_cross增量备份还没有做。
                36.增量备份的目录里3月10日和11日的zip文件还没有上传。
                38.应该打印出每只股票应该买多少股和每种算法的成功率。
                38.各个成功率计算上出现了重大的bug，看来要重新计算了。
                30.正在计算3月31日的数据，但月的数据因为有问题，所以没有计算。
                38.4月1日的数据还没有计算，别忘了这个要计算周的数据。最后real_transaction_condition表的数据别
                忘记计算。
                39.stock_month和mdl_stock_month_analysis表2022年1月开始的数据都有问题，需要重新计算。
                之后的备份文件也要重新上传。
                41.4月1日使用的是126的接口，还有些列是空的。stock_transaction_data_all表中数据有些列也是空。
                stock_index表和stock_index_week表也没有这个星期的数据，备份数据也没有呢。
                38.增量备份有时间应该重新重头运行一下了。
                37.bucky项目还需要导入导出所有集合的数据。
                由于有的集合很大，一次都放在list中会内存泄漏，所以只能追加，这样的话整个文件就不再是一个json
                数组了。然后导入时，只能每次读一行再插入。
                38.STOCK_TRANSACTION_DATA_ALL表还没有备份。其他表的备份还没有上传。
                37.temp开头的表还没有分析。
                36.打印的买卖建议有些让人看不懂，还是要再改一下。
                36.4月21日使用的是126接口，有些列还是空，stock_transaction_data_all表也是空。
                38.4月26日、27日使用的是126的接口，stock_tranaction_data_all没有数据。
                40.temp开头的表数据好了，可以做总结了，阈值是30。
                39.该写方法createAllTransactionStrategyGoldCrossRatePicture的281行了。
                此外还有个bug得先改。
                38.画个图，八种算法在某一天发出买入信号的数量。还有就是出于金叉或者死叉状态的数量。
                42.类似getAverageDifDeaByCurrentDateAndPreviousDate的四个方法错了，应该是CrossStatus，
                而不是CrossType，因此previousDate是没用的。
                45.阈值为20的测试完成了，需要总结一下。
                39.方法importIntoHistoryDataTable，下次测试完成之后可以执行试试了，但之前model表中要先添加记录。
                46.model表中id为2的记录好了，还没分析。
                45.MACD百分比图没有生成。
                44.20220520的成功率图和20220523的成功率图在hei_kin_ashi图上区别很大。
                这个问题无法复现，但是应该重新计算下8种算法的数据了，因为在存储过程中发现了bug。
                使用计算全部数据的存储过程。
                45.5月30日、31日，6月1日都没有数据。stock_transaction_data_all表当天的记录为空。
                45.model表中id为4的记录该分析了。
                45.id为5的model表记录好了，可以统计了。
                45.考虑是在java代码中计算仓位，还是在存储过程中计算仓位。
                44.使用所有算法时，由于还要考虑控制仓位的情况，因此还是要考虑个算法的。
                纯粹靠计算的方法可能不行，还是得找个策略。
                就按照成功率或百分比降序分配就行了：1、2、3、4、1、2、3、4、1、2这样。
                45.idea无法安装gittoolbox，可能得下载一个低版本的idea了。
                44.model表要同时适用于success_rate和percentage两种算法，因此要创建新的列，成功率适用的列以s_开头，
                百分比适用的列以p_开头，两者都适用的不专门设置开头。此外还要专门创建一列，表示使用的是哪种算法。
                40.方法createRobotAccountLogProfitRatePicture已经做完了，但数据还不全，等到有了一年的数据时再做吧。
                并且图形不直观。可以考虑换为adjust收益率。
                38.金叉死叉股票数量百分比已经有了，接下来这么做：
                设阈值为25，如果某个算法，当百分比今天高于25，昨天低于25时，则买入/融券。如果同时出现两个算法
                都满足这个条件，则选择那个百分比高的。无论做多，还是做空都是这样。
                卖出/还券仍然按照各个算法来做。
                注意，这个百分比法有时候会出现同时发出买入和融券的信号。
                44.先把8种算法的平均成功率图都做出来，然后可以思考两个问题。一是8种算法的平均成功率不一定都得是10
                天。二是每一只股票的8种平均成功率是否是sin函数形态，如果是的话，可以考虑一种思路：以前是先计算
                总体的成功率，再去寻找个股，是否可以直接查找个股的成功率。
                哈哈，8种算法的平均成功率图已经有了
                44.
                已经解决的：
                先保存存储过程PKD_MODEL_RECORD。

                mdl_kd_dead_cross 所有数据重复，需要重新计算然后再看看还有没有错，存在buy_date和sell_date的问题，
                居然出现了24日的数据。已经修改，还需要测试

                mdl_close_price_ma5_gold_cross 全量没错，每日有重复，已修改，还需要测试，
                计算6月23日数据时，看看是否会出现24日的数据

                mdl_close_price_ma5_dead_cross 全量没错，每日有重复，已修改，还需要测试，
                计算6月23日数据时，看看是否会出现24日的数据
                没有24日数据

                mdl_hei_kin_ashi_up_down 全量没错，每日有重复，已修改，还需要测试，
                计算6月23日数据时，看看是否会出现24日的数据
                没有24日数据

                mdl_kd_gold_cross 所有数据重复，最近的一条记录accumulative_profit_loss列有错，
                存在buy_date和sell_date的问题，已经修改，还需要测试，计算6月23日数据时，看看是否会出现24日的数据
                1 3253284 600615 2022/6/21 6.99 19.2574095871919 24.4699804724718 2022/6/16 7.77
                28.8895389944899 20.0117815765294 373.441712581306 -10.04
                2 2221717 600615 2022/5/24 9.16 74.9752422264668 75.9963420437271 2022/5/10 8.13
                28.6670500447323 27.7234647575666 1605.76437064059 12.67
                有24日数据，130+134=264

                mdl_hei_kin_ashi_down_up 全量没错，每日有重复，已修改，还需要测试，
                计算6月23日数据时，看看是否会出现24日的数据
                没有24日数据
                46.6月27日的数据计算完之后，检查8种算法对应的表的数据在最近一天是否有错。
                45.检查CAL_MA_PATTERN_OVERSOLD是否正确，是否有用。
                45.好像实时交易时没有报出卖出信号。
                49.先计算8月8日至8月12日周线级别的基础数据，在执行存储过程CAL_BOLL_BY_DATE，然后看看是否正确。
                49.存储过程CAL_BOLL和CAL_BOLL_BY_DATE都是正确的，但是还没有对应java方法，先做完测试再写。
                48. 现在遇到了一个问题，是使用MA20，还是大智慧上的（26,2）?。
                表mdl_boll_macd_gold_cross已经创建好了，可以写存储过程CAL_MDL_BOLL_MACD_GOLD_CROSS了。
                49.计算6月29日至8月23日的RobotMain，看看是否和真实交易给出的参考一样。
                49.存储过程CAL_MDL_BOLL_MACD_GOLD_CROSS等8个存储过程写完了，正在运行，之后还需要打开大智慧对照一下。
                除了第六个和第八个，其他的都通过了。
                54.在写布林带突破上轨或跌破下轨的方法之前，应该先画出图来证明算法的可行性。还没写完。
                dao的方法findAvgClosePriceAndAvgUPAndAvgMBAndAvgDNGroupByYearAndWeek报错了。
                年和这一年的第几周的方式是错的：
                49 2021 01 23.3926072207414 26.9448485613327 22.0385865724382 17.131781928319 4127
                50 2020 53 95.2371428571428 12.93 11.6 10.26 7
                53.布林带突破上轨或跌破下轨的方法已经运行完了，还得看看对不对。
                41.表MDL_G_C_D_C_ANALYSIS已经创建，列也都定义好了。方法writeModelGoldCrossDeadCrossAnalysis已经写好了。
                接下来要计算其他字段了。
                存储过程WRITE_MDL_G_C_D_C_A_S_R_MA写完了，运行完了，回头看看是否正确。
                52.model_id为29和30的记录可能有问题，实在不行就删了吧。下次运行时加上方法importIntoHistoryDataTable。
                62.model表中id等于1的情况再计算一遍，看看两次是否差不多。
                62.mdl_g_c_d_c_analysis表的数据开始重新计算了，先全量再增量，看看和RobotMain计算的是否一样。
                9月27日及其之后的记录可以先删掉，因为在计算的时候这些天的基础数据还不全呢。然后再计算。
                60.比如突破布林带上轨的股票也得有几百只，得想办法减少到几十只。可以考虑做个图，x轴是收益率，
                y轴是(最高价-布林带上轨)/布林带上轨。看看是否突破的越多收益越多。
                正在执行，回头看看结果如何。8张图都出来的，都服从正态分布，似乎这个思路行不通。
                存储过程有错，方法writeModelWeekBollClosePriceMa5DeadCross需要重新执行。然后再生成图片看看。
                注意：方法writeModelWeekBollClosePriceMa5DeadCross执行完之后，这个表的最大日期就是9月28日了，
                和其他表不一样了。这个改完了。
                63.用RobotMain计算一天，再用RealTransactionMain计算一天，看看是否一样。
                64.正在执行CALCULATE_STOCK_INDEX_WEEK_HA，还要修改CAL_STOCKINDEXWEEK_HA_BY_DATE再执行。这个弄完了。
                正在执行WRITE_HA，再修改WRITE_HA_BY_DATE。这个弄完了。
                65.重新计算stock_transaction_data_all表的ha_*开头的字段，如果正确的话，则清空
                stock_transaction_data表，再导入数据。最后再计算MDL_WEEK_BOLL_H_K_A_DOWN_UP表和
                MDL_WEEK_BOLL_H_K_A_UP_DOWN表。
                64.mdl开头的5个表（包括MDL_G_C_D_C_ANALYSIS）的数据也要重新生成。正在运行，回头看看是否正确。
                64.MDL_WEEK_BOLL_H_K_A_DOWN_UP表、MDL_WEEK_BOLL_H_K_A_UP_DOWN表和MDL_G_C_D_C_ANALYSIS表计算有错。
                计算MDL_WEEK_BOLL_H_K_A_DOWN_UP表、MDL_WEEK_BOLL_H_K_A_UP_DOWN表的存储过程改了一下，正在计算，
                回头看看是否正确，如果正确的话，那么其他6个存储过程也得改。是对的，看来得改了。
                64.除了MDL_WEEK_BOLL_H_K_A_DOWN_UP表和MDL_WEEK_BOLL_H_K_A_UP_DOWN表以外其他6个表正太计算，
                65.执行RealTransactionMain时报错如下：
                Exception in thread "main" javax.persistence.NoResultException: No entity found for
                query
                at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:286)
                at
                cn.com.acca.ma.dao.impl.StockTransactionDataDaoImpl.findByCodeAndDate(StockTransactionDataDaoImpl.java:53)
                at
                cn.com.acca.ma.service.impl.RealStockTransactionRecordServiceImpl.realTimeJudgeConditionAndGiveSuggestion(RealStockTransactionRecordService
                Impl.java:378)
                at
                cn.com.acca.ma.main.AbstractMain.realTimeJudgeConditionAndGiveSuggestionAndSendEMail(AbstractMain.java:998)
                at cn.com.acca.ma.main.RealTransactionMain.main(RealTransactionMain.java:29)
                64.MDL_G_C_D_C_ANALYSIS表还有错。
                表mdl_close_price_ma5_gold_cross、mdl_hei_kin_ashi_up_down的最小日期记录是2019年1月2日，程序
                改好了，正在执行。执行完这两个再执行MDL_G_C_D_C_ANALYSIS表的存储过程。
                存储过程PKG_MODEL_G_C_D_C_ANALYSIS.WRITE_MDL_G_C_D_C_A_S_R_MA()还没有执行，其他的都执行了。
                57.执行完importIntoHistoryDataTable方法后，再看看his_*开头的表是否数据也正确。
                56.旧的F:\temp\RobotStockTransactionRecordServiceImpl.java。其中有ma5金叉死叉ma10。
                66.删除了所有的BigDecimal.ROUND_CEILING，但是记得这样好像有个地方会报错。
                66.000807还有问题，原因是在存储过程write_real_transac_cond。
                67.robot2-run.bat在执行前需要在model表中加入一行。
                66.不应该有600776，应该有600592
                66.RobotMain在计算2021年1月12日时，先卖了601366，又买了601366，这个不对，只能改RobotMain，还没有改。
                RealTransactionMain的程序和存储过程对不上，已经修改了，还需要重新执行一遍2021年1月12日的计算。
                所以明天早上要做的事：
                a,修改RobotMain。
                f,Robot2Main已经build好了，直接执行就行了。

                已经完成的：
                c,Robot3Main应该已经执行完了，还需要执行import方法，然后在excel上统计。
                f,9点之前钉钉签到。
                e,Robot2Main和AllMain暂停，先写暂停的那个交易日的工作计算完，再和公司的笔记本互换位置。
                d,自媒体发布文章。
                b,RealTransactionMain已经build好了，直接执行就行了。
                c,Robot3Main已经build好了，直接执行就行了。
                e,AllMain已经build好了，直接执行就行了。
                68.stock-build.bat已经执行好了，回头直接执行stock-run.bat就行了。
                67.12月7日，用了126的接口，有些记录的字段还是空的，stock_transaction_data_all表对应的字段也是空。
                67.StockMain已经构建好了直接执行stock-run.bat就行了。
                66.RobotMain和RealTransactionMain运行完了，但是对不上。RobotMain里应该有601985。
                66.robot2_task.py在运行hei_kin_ashi时总是卡住。
                65.doBuyAndSellByBeginDateAndEndDate_weekBoll方法正在执行，收益率不高，可能得把单调递减和单调递增
                加上了。加上之后也不高，得想别的办法了。
                可以考虑去除单调递减和单调递增的条件，然后保留各种金叉或者各种死叉的股票。
                64.RealTransactionMain在计算了10月13日的数据前后分别运行了一次，看看是否相等。
                a.RealTransactionMain在计算13日的数据前和之后的成功率相同，但选择的股票是不同的。
                b.RealTransactionMain和RobotMain都在计算了13日的数据之后运行，成功率是相同的，但选择的股票不同。
                RealTransactionMain和RobotMain选出的股票数量不完全相等，其中个别几个不同，其余的都是相同的。
                已经在ma120NotDecreasing类似的方法的SQL中加上round函数，运行之后看一看。
                两个原则：
                a.选择更加偏向出现金叉的情况。
                b.选择增加交易次数的情况。
                63.RobotMain和RealTransactionMain在成功率和推荐的股票上都不一样，得好好找找原因了。
                RobotMain和RealTransactionMain都运行了，看看结果是否一致。不一致
                62.doBuyAndSellByBeginDateAndEndDate_weekBoll可以这么做：
                a.如果突破布林带上轨的股票数量多于跌破布林带下轨的股票数量，则选择做空。
                b.如果是做空，则选择年线和半年线单调递减的。
                c.在这一天出现4种金叉或者4种死叉的留下，其余的删除。
                d.在剩下的股票中随机选择进行交易。
                注意：当到达c这一步的时候，但做法是根据MA5和MA10来比较，最终还是要确定一种方法。
                61.用40只持股数量再测试一下，成功率周期设置为10天。
                59.mdl_week_boll_*开头的表还没写计算每日数据的方法。
                58.趋势行情中跌破或突破布林带上轨或下轨的股票太少了，再经过几个过滤条件，结果记录数就为0了，
                可以试试跌破或突破布林带中轨。
                55._weekBoll方法使用的是收盘价，可以换成最高价和最低价再试试。
                54.因为有了强制止损，所以以前测试过的，可以再测试一下。
                53.关于卖股票的条件应当多加几个：
					a.收盘价低于买入价格的3.5%。
					b.收盘价到达上一周布林带的中轨。
					c.收盘价突破上一周布林带的上轨/下轨。
                54.stock_transaction_data和stock_transaction_data_all表的记录都已经删除，但是其他的表中的记录还没有删。
					两台电脑都要删才行。
					model表有的列还有错。
                56.java用多线程调用python程序时，电脑直接卡住了，只能将insertStockTransactionData_163方法再用
					python写一遍了。
                58.model表中应该创建是否止盈的列和止盈率的列。
                54.从1月12日开始由于163接口无法使用，因此没有新的记录了。126接口也没有再用。
                60.baostock在2月17日的接口数据有错误，看来得再找个接口网站了。
					正在使用sohu的接口，但程序还没有写完。
                63.公司笔记本从1月13日开始重新计算数据。
                61.应该考虑周线级别close_price金叉死叉MA5了，因为周线级别KD在单边行情时会出现钝化或背离。
                46.通过实战发现，似乎MACD缺点很多，尤其是止损太晚了。可以考虑全程只使用一种算法，然后用robot模拟一下。
                44.不要怕白干，把能做的实验都做了。先从CAL_MA_PATTERN_OVERSOLD做起。
                66.方法createWeekMAAndClosePricePicture还没做完。
					select t.begin_date, t.end_date from STOCK_INDEX_WEEK t
					where t.begin_date>=to_date('2023-01-01','yyyy-mm-dd') and t.end_date<=to_date('2023-3-1','yyyy-mm-dd')
					group by t.begin_date, t.end_date order by t.begin_date asc;

					select * from stock_index_week t
					where t.end_date between to_date('2023-01-01','yyyy-mm-dd') and to_date('2023-3-1','yyyy-mm-dd');

					select avg(t.ma5), avg(t.ma10), avg(t.ma20), avg(t.ma60), avg(t.ma120), avg(t.ma250), avg(t.close_price)
					from stock_week t
					where t.begin_date>=to_date('2023-02-06','yyyy-mm-dd') and t.end_date<=to_date('2023-2-10','yyyy-mm-dd')
				61.就用公司的电脑来测试robot4（周线级别close_price金叉死叉ma5），应该可以和家里的电脑同步完成。
					然后可以考虑Real4TransactionMain类了。
				60.从1月12日开始的数据都删了，重新用sohu的接口运行一次。
					家里的电脑和公司的电脑都计算到了1月20日，该从23日开始了。
				63.model_id为470的测试，数据有问题。
				62.Real4TransactionMain开始写了，还没写完。写完后需要和Robot4Main一起测试（参数是同一天），看看是否有bug。
					Real4TransactionMain没必要仿照RealTransactionMain写，因此区别很大。
				65.Real4TransactionMain中的大sql，其中的stock_week得改为取上周的数据。
					Robot4Main还得再看看有没有原本应该去昨天或上一周数据的。
				67.可以考虑计算周线级别布林带上轨减去下轨，然后创建个折线图，再看看这个折线图是否可以识别出窄幅震荡和大幅震荡的形态。
                66.stock_week没有hei_kin_ashi字段，这个得加上。然后做一个周线级别的图，再考虑Robot4Main中是否使用这个。
					方法writeStockWeekHeiKinAshi已经写完，正在执行。方法writeStockWeekHeiKinAshiByDate也写完了，还没执行过。
					方法createWeekHeiKinAshiUpDownPicture已经写好了，先把所有该生成的图片都生成出来，还差几年的。
				70.4132011、4012016得重新计算一遍。
				64.家里的电脑和公司的笔记本测试同一年的数据，结果一个50%，另一个-20%！！！
				63.家里的电脑正在测试Robot4Main，只有一个账号，持股数量为40。这个得从头到尾都测完才行，然后看看和4个账号，每个
					持股10有什么区别。
				73.家里analysis的几个表是不是还不行呢。
				69.4月18日提交到github上的代码还没有同步到家里的电脑上。
				74.查看一下公司笔记本是否将周线级别kd重新计算了，看日志。
				73.家里电脑stock_week表的kd还需要重新都计算一遍。
				72.为什么一定要根据上周的平均close_price来判断方向，不能根据周五的时候计算出来的平均close_price来判断呢？
					这个可以试一试。这个在hei_kin_ashi上实现了，回头测试一下。
				80.stock_transaction_data_all表在2022年12月21日左右，hei_kin_ashi的字段为空，公司笔记本已经有了，但家里电脑还没看。
				78.stock_transaction_data_all表关于布林带的字段现在只有两位小数，得改为没有限制的。stock_week、
					stock_transaction_data表也有这个问题。
				80.家中的stock_transaction_data、stock_transaction_data_all表和公司的要一致。
				79.存储过程CAL_BOLL_BY_DATE中，应该改为表stock_transaction_data，公司笔记本已经修改，但家里电脑还没改。
					这个运行很慢，也有可能本身有问题，运行完之后要测试一下。
				76.方法writeBoll和writeBollByDate都写完了，方法writeBoll正在运行，回头看看，这个是正确的。
					注意：现在是计算表stock_transaction_data_all中的记录，回头还得想想怎么计算表stock_transaction_data中的记录。
					可以考虑：
					update stock_transaction_data s
					set s.up=(select t.up from stock_transaction_data_all t where t.code_=s.code_ and t.date_=s.date_),
					s.dn_=(select t.dn_ from stock_transaction_data_all t where t.code_=s.code_ and t.date_=s.date_),
					s.mb=(select t.mb from stock_transaction_data_all t where t.code_=s.code_ and t.date_=s.date_);
					commit;
					家里笔记本还没有运行这两个方法，writeBoll方法正在运行。
				75.432可能还是使用的上周和上上周，这个得改为本周和上周，然后重新计算一下。
				70.导出导入model、his开头的表的python已经开始写了。弄到方法store_his_robot_transaction_record_in_file和
					insert_into_his_robot_transaction_record了。
        81.家中电脑要限制性那几个存储过程和SQL，再开始从5月22日开始计算数据。
        84.日线级别布林带，stock_tranaction_data_all表中的数据还没有计算，星期四开始计算吧。
				]]>
            </td>
    </table>
</div>
</body>
</html>
